﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;

namespace ReseWCF
{
    public class Service1 : IService1
    {
        public List<Resa> GetResor() {

            List<Resa> resor = new List<Resa>();

            DataSet1TableAdapters.ResaTableAdapter reseTa = new DataSet1TableAdapters.ResaTableAdapter();
            DataSet1.ResaDataTable reseDT = reseTa.GetDataThree();

            foreach (DataSet1.ResaRow row in reseDT)
            {
                bool sverigeStart = false;
                if (row.SverigeStart == 1)
                    sverigeStart = true;
                bool godkand = false;
                if (row.Godkand == 1)
                    godkand = true;
               
                Resa resa = new Resa(row.ResaID, row.Anstalld, row.Semesterdagar, row.InrikesUtrikes, sverigeStart, row.Anledning, row.Startdatum, row.Slutdatum, row.Land, godkand, row.Traktamente);
                resor.Add(resa);
            }
            
            return resor;
        }

        public List<Resa> GetResorByUser(string anstalld) {

            List<Resa> resor = new List<Resa>();

            DataSet1TableAdapters.ResaTableAdapter reseTa = new DataSet1TableAdapters.ResaTableAdapter();
            DataSet1.ResaDataTable reseDT = reseTa.GetDataThree();
            
            foreach (DataSet1.ResaRow row in reseDT)
            {
                if (row.Anstalld.ToLower().Trim().Equals(anstalld.ToLower().Trim()))
                {
                    bool sverigeStart = false;
                    if (row.SverigeStart == 1)
                        sverigeStart = true;
                    bool godkand = false;
                    if (row.Godkand == 1)
                        godkand = true;

                    Resa resa = new Resa(row.ResaID, row.Anstalld, row.Semesterdagar, row.InrikesUtrikes, sverigeStart, row.Anledning, row.Startdatum, row.Slutdatum, row.Land, godkand,row.Traktamente);
                    resor.Add(resa);
                }
            }
            
            return resor;
        }

        public List<Resa> GetResorByUserID(int id)
        {

            List<Resa> resor = new List<Resa>();

            DataSet1TableAdapters.ResaTableAdapter reseTa = new DataSet1TableAdapters.ResaTableAdapter();
            DataSet1.ResaDataTable reseDT = reseTa.GetDataThree();

            foreach (DataSet1.ResaRow row in reseDT)
            {
                if (row.ResaID == (short) id)
                {
                    bool sverigeStart = false;
                    if (row.SverigeStart == 1)
                        sverigeStart = true;
                    bool godkand = false;
                    if (row.Godkand == 1)
                        godkand = true;

                    Resa resa = new Resa(row.ResaID, row.Anstalld, row.Semesterdagar, row.InrikesUtrikes, sverigeStart, row.Anledning, row.Startdatum, row.Slutdatum, row.Land, godkand, row.Traktamente);
                    resor.Add(resa);
                }
            }

            return resor;
        }

        public List<ReseForskott> GetReseForskott()
        {

            List<ReseForskott> reseforskott = new List<ReseForskott>();

            DataSet1TableAdapters.ReseforskottTableAdapter reseTa = new DataSet1TableAdapters.ReseforskottTableAdapter();
            DataSet1.ReseforskottDataTable reseDT = reseTa.GetReseforskottFour();

            foreach (DataSet1.ReseforskottRow row in reseDT)
            {
                bool isUtnyttjad = false;
                if (row.Utnyttjad == 1)
                    isUtnyttjad = true;

                ReseForskott forskott = new ReseForskott(row.ReseforskottID, isUtnyttjad, row.Belopp, row.Anledning, row.Handlaggare, row.Konto, row.Anstalld);
                reseforskott.Add(forskott);
            }

            return reseforskott;
        }

        public List<ReseForskott> GetReseForskottByUser(string anstalld)
        {

            List<ReseForskott> reseforskott = new List<ReseForskott>();

            DataSet1TableAdapters.ReseforskottTableAdapter reseTa = new DataSet1TableAdapters.ReseforskottTableAdapter();
            DataSet1.ReseforskottDataTable reseDT = reseTa.GetReseforskottFour();

            foreach (DataSet1.ReseforskottRow row in reseDT)
            {
                if (row.Anstalld.ToLower().Trim().Equals(anstalld.ToLower().Trim()))
                {
                    bool isUtnyttjad = false;
                    if (row.Utnyttjad == 1)
                        isUtnyttjad = true;

                    ReseForskott forskott = new ReseForskott(row.ReseforskottID, isUtnyttjad, row.Belopp, row.Anledning, row.Handlaggare, row.Konto, row.Anstalld);
                    reseforskott.Add(forskott);
                }
            }

            return reseforskott;
        }

        public List<Utlagg> GetUtlagg()
        {

            List<Utlagg> utlagg = new List<Utlagg>();

            DataSet1TableAdapters.UtlaggTableAdapter utlaggTa = new DataSet1TableAdapters.UtlaggTableAdapter();
            DataSet1.UtlaggDataTable utlaggDT = utlaggTa.GetUtlagg();

            foreach (DataSet1.UtlaggRow row in utlaggDT)
            {
                bool hasKvitto = false;
                if (row.Kvitto == 1)
                    hasKvitto = true;

                Utlagg ut = new Utlagg(row.UtlaggID, row.Typ, row.Valuta, row.Summa, row.Moms, hasKvitto, row.Resa);
                utlagg.Add(ut);
            }

            return utlagg;
        }

        public List<Utlagg> GetUtlaggByResa(int resa)
        {

            List<Utlagg> utlagg = new List<Utlagg>();

            DataSet1TableAdapters.UtlaggTableAdapter utlaggTa = new DataSet1TableAdapters.UtlaggTableAdapter();
            DataSet1.UtlaggDataTable utlaggDT = utlaggTa.GetUtlagg();

            foreach (DataSet1.UtlaggRow row in utlaggDT)
            {
                if (resa == (int)row.Resa)
                {
                    bool hasKvitto = false;
                    if (row.Kvitto == 1)
                        hasKvitto = true;

                    Utlagg ut = new Utlagg(row.UtlaggID, row.Typ, row.Valuta, row.Summa, row.Moms, hasKvitto, row.Resa);
                    utlagg.Add(ut);
                }
            }

            return utlagg;
        }

        public List<Konto> GetKonto()
        {

            List<Konto> konton = new List<Konto>();

            DataSet1TableAdapters.KontoTableAdapter kontoTa = new DataSet1TableAdapters.KontoTableAdapter();

            DataSet1.KontoDataTable kontoDT = kontoTa.GetKonto();

            foreach (DataSet1.KontoRow row in kontoDT)
            {
                Konto konto = new Konto(row.KontoID, row.Kontonamn, row.Beskrivning, row.Kontonummer);
                konton.Add(konto);
            }

            return konton;
        }

        public List<Handlaggare> GetHandlaggare()
        {

            List<Handlaggare> handlaggare = new List<Handlaggare>();

            DataSet1TableAdapters.HandlaggareTableAdapter handlaggareTa = new DataSet1TableAdapters.HandlaggareTableAdapter();

            DataSet1.HandlaggareDataTable handlaggareDT = handlaggareTa.GetHandlaggare();

            foreach (DataSet1.HandlaggareRow row in handlaggareDT)
            {
                Handlaggare hand = new Handlaggare(row.HandlaggareID, row.Fornamn, row.Efternamn);
                handlaggare.Add(hand);
            }

            return handlaggare;
        }

        public void SetResor(List<Resa> resor) {

            DataSet1TableAdapters.ResaTableAdapter reseTA = new DataSet1TableAdapters.ResaTableAdapter();
         
            foreach (Resa resa in resor)
            {

                string anstalld = resa.Anstalld;
                int semesterdagar = resa.SemesterDagar;
                string inrikesUtrikes = resa.InrikesUtrikes;
                byte sverigeStart = 0;
                if (resa.SverigeStart)
                    sverigeStart = 1;
                byte godkand = 0;
                if (resa.Godkand)
                    godkand = 1;
                string anledning = resa.Anledning;
                DateTime startDatum = resa.StartDatum;
                DateTime slutDatum = resa.SlutDatum;
                string land = resa.Land;
                double traktamente = resa.Traktamente;
                
                reseTA.Insert(anstalld, semesterdagar, sverigeStart, anledning, startDatum, slutDatum, inrikesUtrikes, land, godkand, traktamente);
            }
        }

        public void SetReseForskott(List<ReseForskott> reseforskott) {

            DataSet1TableAdapters.ReseforskottTableAdapter reseforskottTA = new DataSet1TableAdapters.ReseforskottTableAdapter();
           
            foreach (ReseForskott forskott in reseforskott)
            {

                byte isUtnyttjad = 0;
                if (forskott.IsUtnyttjad)
                    isUtnyttjad = 1;
                double belopp = forskott.Belopp;
                string anledning = forskott.Anledning;
                short handlaggare = (short) forskott.Handlaggare;
                short konto = (short) forskott.Konto;
                string anstalld = forskott.Anstalld;

                reseforskottTA.Insert(isUtnyttjad, belopp, anledning, handlaggare, konto, anstalld);
            }
        }

        public void SetUtlagg(List<Utlagg> utlagg) {

            DataSet1TableAdapters.UtlaggTableAdapter utlaggTA = new DataSet1TableAdapters.UtlaggTableAdapter();
           
            foreach (Utlagg lagg in utlagg)
            {
                string typ = lagg.Typ;
                string valuta = lagg.Valuta;
                double summa = lagg.Summa;
                double moms = lagg.Moms;
                byte kvitto = 0;
                if (lagg.Kvitto)
                    kvitto = 1;
                short resa = (short) lagg.Resa;
                utlaggTA.Insert(typ, valuta, summa, moms, kvitto, resa);
            }
        }

        public void SetKonto(List<Konto> konton) {

            DataSet1TableAdapters.KontoTableAdapter kontoTA = new DataSet1TableAdapters.KontoTableAdapter();
        
            foreach (Konto konto in konton)
            {
                string kontonamn = konto.KontoNamn;
                string beskrivning = konto.Beskrivning;
                long kontonr = konto.KontoNr;

                kontoTA.Insert(kontonamn, beskrivning, kontonr);
            }
  
        }

        public void SetHandlaggare(List<Handlaggare> handlaggare) {

            DataSet1TableAdapters.HandlaggareTableAdapter handlaggareTA = new DataSet1TableAdapters.HandlaggareTableAdapter();
           
            foreach (Handlaggare laggare in handlaggare)
            {
                string fornamn = laggare.Fornamn;
                string efternamn = laggare.Efternamn;
                handlaggareTA.Insert(fornamn, efternamn);
            }
           
        }

        public void UpdateReseforskott(short id, byte utnyttjad)
        {
            DataSet1TableAdapters.ReseforskottTableAdapter reseforskottTA = new DataSet1TableAdapters.ReseforskottTableAdapter();

            reseforskottTA.Update(utnyttjad, id);
        }

        public void UpdateResa(short id)
        {
            DataSet1TableAdapters.ResaTableAdapter resaTA = new DataSet1TableAdapters.ResaTableAdapter();

            resaTA.Update(id, 1);
        }
    }
}
